package api

import (
	"gitee.com/go-course/go11/devcloud-mini/cmdb/apps/secret"
	restfulspec "github.com/emicklei/go-restful-openapi/v2"
	"github.com/emicklei/go-restful/v3"
	"github.com/infraboard/mcube/ioc"
)

func init() {
	ioc.RegistryApi(&Handler{})
}

type Handler struct {
	// 需要一个业务的具体实现
	// svc token.Service
	// 托管Ioc
	ioc.IocObjectImpl

	//
	svc secret.Service
}

// 让他从Ioc中获取依赖的对象
func (h *Handler) Init() error {
	h.svc = ioc.GetController(secret.AppName).(secret.Service)
	return nil
}

func (h *Handler) Name() string {
	return secret.AppName
}

func (h *Handler) Registry(r *restful.WebService) {
	// api doc中的分类标签
	tags := []string{"凭证管理"}

	// 怎么控制哪些接口认证，哪些接口不认证
	// @role("admin")
	r.Route(r.GET("/").To(h.QuerySecret).
		Doc("查询凭证列表").
		// 作为OpenApi的值作为展示
		Metadata(restfulspec.KeyOpenAPITags, tags).
		// 通过auth来控制是否开启认证和鉴权
		Metadata("auth", true).
		Metadata("permission", true).
		Metadata("resource", "secret").
		Metadata("action", "list").
		Metadata("audit", false))

	// 怎么控制哪些接口认证，哪些接口不认证
	// @role("admin")
	r.Route(r.GET("/{id}/sync_resource").To(h.SyncResource).
		Doc("资源同步[websocekt]").
		// 作为OpenApi的值作为展示
		Metadata(restfulspec.KeyOpenAPITags, tags).
		// 通过auth来控制是否开启认证和鉴权
		Metadata("auth", false).
		Metadata("permission", false).
		Metadata("resource", "secret").
		Metadata("action", "sync_resource"))
}
